package MovingWindowSeries;

import java.util.HashSet;
import java.util.Set;

public class LengthOfLongestSubstringSolution_hot100_3 {
    public int lengthOfLongestSubstring(String s) {
        Set<Character> set = new HashSet<>(); // 判断元素是否出现过
        int right = 0; //滑动窗口右边界
        int result = 0;

        for (int i = 0; i < s.length(); i++) {
            // 1、将左指针向右移动一格，表示我们开始枚举下一个字符作为起始位置
            if (i != 0) {
                // 左指针i向右移动一格
                set.remove(s.charAt(i - 1));
            }

            // 2、不断移动右指针, 但需要保证这两个指针对应的子串中没有重复的字符
            while (right < s.length() && !set.contains(s.charAt(right))) {
                set.add(s.charAt(right));
                right++;
            }

            result = Math.max(result, right - i);
        }
        return result;
    }
}
